#ifndef ITRANSITION_H
#define ITRANSITION_H

#include "iidentifiable.h"

#include <QtCore/QSet>

namespace net
{
class IExpression;
class IPlace;
}

namespace core
{
class BasicTime;
}

namespace net
{

class ITransition : public IIdentifiable
{
public:
    ITransition() : IIdentifiable() {}

    virtual QString name() const = 0;

    virtual IExpression* getGuard() const = 0;
    virtual core::BasicTime getDelay() const = 0;

    virtual void setGuard(IExpression* guard) = 0;
    virtual void setDelay(const core::BasicTime& time) = 0;

    virtual QSet<const IPlace* > getInputPlaces() const = 0;
    virtual QSet<const IPlace* > getOutputPlaces() const = 0;

    virtual void fire(const core::BasicTime& globalClock) = 0;

protected:
    virtual ~ITransition() {}
};

} // namespace net
#endif
